#include<iostream>
#include<functional>
#include<vector>
#include<memory>
#include"err.hpp"
#include"tcpserver.hpp"
using namespace std;
using namespace TCP_sv;

static void Usage(string proc)
{
    cerr<<"Usage:\n\t"<<proc<<" port "<<"\n\n";
}

string resp(const string& s)
{
    return s;
}

int main(int argc,char* argv[])
{
    if(argc!=2)
    {
        Usage(argv[0]);
        exit(USAGE_ERR);
    }
    unique_ptr<Tcpserver> epolsv(new Tcpserver(stoi(argv[2])));
    epolsv->inittcpserver();
    
    
    return 0;
}








//#include"until.hpp"
// using func_t =function<void()>;//定义一个仿函数，返回值为void，无参
// using namespace std;

// #define INIT(v)\
// do             \
// {              \
// v.push_back(Print_log);\
// v.push_back(Download);\
// }while(0)


// #define EXEC(v)\
// do             \
// {              \
// for(auto const& cbs: v)\
// {              \
//     cbs();     \
// }              \
// }while(0)

// fd_set readset;
// int main()
// {
//  setNonBlock(0);//将输入缓冲区的IO行为设置为非阻塞

//     vector<func_t> v;
//     INIT(v);
//     char buffer[1024];//设置缓冲区
//     while(true)
//     {
//         // printf("请输入>>> ");
//         // fflush(stdout);//刷新显示屏缓冲区
//         ssize_t i= read(0,buffer,sizeof(buffer)-1);//从文件描述符为0（键盘）开始读，读到buffer缓冲区中
//         if(i>0)
//         {
//             buffer[i-1]=0;
//             cout<<"echo# "<<buffer<<endl;
//         }else if(i==0)
//         {
//             cout<<"read end"<<endl;
//             break;
//         }else
//         {
            
//         //不输入的话，返回值也是-1，但错误码会被设置为EAGAIN或EWOULDBLOCK
//             if(errno==EAGAIN||errno==EWOULDBLOCK)
//             {
//                 cout<<"i am not wrong,just non data,try again"<<endl;
//                 EXEC(v);//因为是非阻塞，当进入该作用域时说明用户没有输入，此时可以执行其他任务
//             }else if(errno==EINTR)
//             {
//                 continue;
//             }else
//             {
//                 //此时发生错误，打印返回值及其错误码信息
//                 cout<<"i: "<<i<<" errno: "<<strerror(errno)<<endl;
//                 break;
//             }

//         }
//         sleep(1);
//     }

//     return 0;
// }